import json
from datetime import datetime
import pandas as pd
import plotly.graph_objects as go
def loadjson(fn):
f = open(fn)
buf = f.read()
f.close()
obj = json.loads(buf)
return obj
def showLine(name, x, y):
fig = go.Figure()
fig.add_trace(go.Scatter(x=x, y=y,
mode='lines',
name=name))
fig.show()
def funcGetX(e):
return e['x']
def showLineWithMap(name, obj, mode = 'lines'):
fig = go.Figure()
arr = []
x = []
y = []
for k in obj:
arr.append({'x': k, 'y': obj[k]})
arr.sort(key=funcGetX)
for k in range(len(arr)):
x.append(str(arr[k]['x']))
y.append(arr[k]['y'])
fig.add_trace(go.Scatter(x=x, y=y,
mode=mode,#'markers',
name=name))
fig.show()
def showLineWithMap2(name, obj, yname, colorname, mode = 'lines'):
fig = go.Figure()
arr = []
x = []
y = []
color = []
for k in obj:
arr.append({'x': k, 'y': obj[k][yname], 'color': obj[k][colorname]})
arr.sort(key=funcGetX)
for k in range(len(arr)):
x.append(str(arr[k]['x']))
y.append(arr[k]['y'])
color.append(arr[k]['color'])
fig.add_trace(go.Scatter(x=x, y=y,
mode=mode,#'markers',
name=name,
marker=dict(
size=2,
color=color,#np.random.randn(500), #set color equal to a variable
colorscale='bluered', # one of plotly colorscales
showscale=True
)))
fig.show()
def showLinesWithMap(title, names, objs, mode = 'lines', xname='', yname=''):
fig = go.Figure()
for i in range(len(objs)):
name = names[i]
obj = objs[i]
arr = []
x = []
y = []
for k in obj:
arr.append({'x': k, 'y': obj[k]})
arr.sort(key=funcGetX)
for k in range(len(arr)):
x.append(arr[k]['x'])
y.append(arr[k]['y'])
fig.add_trace(go.Scatter(x=x, y=y,
mode=mode,#'markers',
name=name))
fig.update_layout(title=title)
fig.update_xaxes(title_text=xname)
fig.update_yaxes(title_text=yname)
fig.show()
# 分析nodes
def analyzeNodes(obj):
if obj['nodes'] is None:
return {}
mapNums = {}
for i in range(len(obj['nodes'])):
curobj = obj['nodes'][i]
k = curobj['totalVal']
mapNums[k] = len(curobj['lstHP'])
return mapNums
# 根据战斗结果筛选数值匹配的怪物属性配置,这里主要得到不同结果下的怪物数量
def analyzeEnemyNums(obj):
lstnames = ['total']
lstmaps = [analyzeNodes(obj)]
for i in range(len(obj['detailNodes'])):
if obj['detailNodes'][i]['nodes'] is not None:
if obj['detailNodes'][i]['minTurns'] > 0 and obj['detailNodes'][i]['maxTurns'] > 0 and obj['detailNodes'][i]['minLastHP'] > 0 and obj['detailNodes'][i]['maxLastHP'] > 0:
lstnames.append('turn [{}, {}) lasthp [{}, {})'.format(
obj['detailNodes'][i]['minTurns'],
obj['detailNodes'][i]['maxTurns'],
obj['detailNodes'][i]['minLastHP'],
obj['detailNodes'][i]['maxLastHP']))
elif obj['detailNodes'][i]['minTurns'] > 0 and obj['detailNodes'][i]['maxTurns'] > 0:
lstnames.append('turn [{}, {})'.format(
obj['detailNodes'][i]['minTurns'],
obj['detailNodes'][i]['maxTurns']))
else:
lstnames.append('lasthp [{}, {})'.format(
obj['detailNodes'][i]['minLastHP'],
obj['detailNodes'][i]['maxLastHP']))
lstmaps.append(analyzeNodes(obj['detailNodes'][i]))
return lstnames, lstmaps
report = loadjson('./genenemy3.json')
lstnames, lstmaps = analyzeEnemyNums(report)
showLinesWithMap('均衡怪物各属性数量分布', lstnames, lstmaps, xname='总属性', yname='数量')
report = loadjson('./genenemy3hp.json')
lstnames, lstmaps = analyzeEnemyNums(report)
showLinesWithMap('偏肉的怪物各属性数量分布', lstnames, lstmaps, xname='总属性', yname='数量')
report = loadjson('./genenemy3dps.json')
lstnames, lstmaps = analyzeEnemyNums(report)
showLinesWithMap('偏输出的怪物各属性数量分布', lstnames, lstmaps, xname='总属性', yname='数量')
report = loadjson('./genenemy3moredps.json')
lstnames, lstmaps = analyzeEnemyNums(report)
showLinesWithMap('极致输出的怪物各属性数量分布', lstnames, lstmaps, xname='总属性', yname='数量')
report = loadjson('./genenemy3morehp.json')
lstnames, lstmaps = analyzeEnemyNums(report)
showLinesWithMap('极致肉的怪物各属性数量分布', lstnames, lstmaps, xname='总属性', yname='数量')